<?php
namespace modules\post\form;

use idea\saf\sl\Form;
use helper\ErrorNo;
use helper\Util;
use library\Validator;

/**
 * Categories class file
 * categories表单管理类
 * @author 宋欢 <iphper@yeah.net>
 * @version $Id: Categories.php 1 2013-05-18 14:58:59Z huan.song $
 * @package modules.post.form
 * @since 1.0
 */
class Categories extends Form
{
	/**
	 * @var string 是否生成静态页面：伪静态或动态访问
	 */
	const IS_HTML_N = 'n';
	
	/**
	 * @var string 是否生成静态页面：生成静态页面
	 */
	const IS_HTML_Y = 'y';
	
	/**
	 * @var array 寄存是否生成静态页面选项
	 */
	public static $isHtmls = array(
		self::IS_HTML_N => '伪静态或动态访问',
		self::IS_HTML_Y => '生成静态页面',
	);

	/**
	 * @var string 是否隐藏：隐藏
	 */
	const IS_HIDE_Y = 'y';
	
	/**
	 * @var string 是否隐藏：显示
	 */
	const IS_HIDE_N = 'n';
	
	/**
	 * @var array 寄存是否隐藏选项
	 */
	public static $isHides = array(
		self::IS_HIDE_N => '显示',
		self::IS_HIDE_Y => '隐藏',
	);
	
	/**
	 * @var string 是否跳转：是
	 */
	const IS_JUMP_Y = 'y';
	
	/**
	 * @var string 是否跳转：否
	 */
	const IS_JUMP_N = 'n';

	/**
	 * @var array 寄存是否跳转选项
	 */
	public static $isJumps = array(
		self::IS_JUMP_N => '否',
		self::IS_JUMP_Y => '是',
	);
	
	/**
	 * @var array 寄存表的所有字段
	 */
	protected $_attributes = array(
		'category_id' => array(
			'label' => '类别ID',
			'type' => 'hidden'
		),

		'category_name' => array(
			'label' => '类别名称',
			'type' => 'text',
			'rule' => array(
				Validator::NOT_EMPTY => array(
					true,
					'请填写类别名.'
				),
				Validator::UNIQUE_CATEGORIES_NAME => true
			)
		),

		'category_pid' => array(
			'label' => '父类别',
			'type' => 'select',
		),

		'module_id' => array(
			'label' => '所属模型',
			'type' => 'select',
		),

		'menu_order' => array(
			'label' => '显示菜单的排序',
			'type' => 'text'
		),
		
		'tpl_index' => array(
			'label' => '封页模板名称',
			'type' => 'text'
		),

		'tpl_list' => array(
			'label' => '列表模板名称',
			'type' => 'text'
		),
		
		'tpl_view' => array(
			'label' => '文章模板名称',
			'type' => 'text'
		),
		
		'html_dir' => array(
			'label' => '生成静态页面存放目录名称',
			'type' => 'text'
		),
		
		'is_html' => array(
			'label' => '是否生成静态页面',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::IS_HTML_Y,
						self::IS_HTML_N
					),
					'必须选中是否生成静态页面选项，值只能是y或n.'
				)
			)
		),
		
		'meta_title' => array(
			'label' => 'SEO Title',
			'type' => 'text'
		),
		
		'meta_keywords' => array(
			'label' => 'SEO Keywords',
			'type' => 'text'
		),
		
		'meta_description' => array(
			'label' => 'SEO Description',
			'type' => 'text'
		),
		
		'is_hide' => array(
			'label' => '是否隐藏',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::IS_HIDE_Y,
						self::IS_HIDE_N
					),
					'必须选中是否隐藏选项，值只能是y或n.'
				)
			)
		),
		
		'jump_url' => array(
			'label' => '跳转链接',
			'type' => 'text'
		),
		
		'is_jump' => array(
			'label' => '是否跳转',
			'type' => 'radio',
			'rule' => array(
				Validator::IN_ARRAY => array(
					array(
						self::IS_JUMP_Y,
						self::IS_JUMP_N
					),
					'必须选中是否跳转选项，值只能是y或n.'
				)
			)
		),
		
		'rule_view' => array(
			'label' => '静态页面链接规则View',
			'type' => 'text'
		),
		
		'rule_list' => array(
			'label' => '静态页面链接规则List',
			'type' => 'text'
		),
	);

	/**
	 * 将所有类别值组成Select表单元素
	 * @return array
	 */
	public function getCategoryPidOptions()
	{
		return $this->getCategoriesOptions();
	}

	/**
	 * 将所有模型的值组成Select表单元素
	 * @return array
	 */
	public function getModuleIdOptions()
	{
		return Util::getForm('Modules', 'post')->getModulesOptions();
	}
	
	/**
	 * 获取是否生成静态页面字段表单元素
	 * @return array
	 */
	public function getIsHtmlOptions()
	{
		return $this->getOptions(self::$isHtmls);
	}
	
	/**
	 * 获取是否隐藏字段表单元素
	 * @return array
	 */
	public function getIsHideOptions()
	{
		return $this->getOptions(self::$isHides);
	}
	
	/**
	 * 获取是否跳转字段表单元素
	 * @return array
	 */
	public function getIsJumpOptions()
	{
		return $this->getOptions(self::$isJumps);
	}
	
	/**
	 * 通过是否生成静态页面选项值，获取是否生成静态页面描述
	 * @param string $value
	 * @return string
	 */
	public function getIsHtmlLabel($value)
	{
		return isset(self::$isHtmls[$value]) ? self::$isHtmls[$value] : '';
	}
	
	/**
	 * 通过是否隐藏选项值，获取是否隐藏描述
	 * @param string $value
	 * @return string
	 */
	public function getIsHideLabel($value)
	{
		return isset(self::$isHides[$value]) ? self::$isHides[$value] : '';
	}
	
	/**
	 * 通过是否跳转选项，获取是否跳转描述
	 * @param string $value
	 * @return string
	 */
	public function getIsJumpLabel($value)
	{
		return isset(self::$isJumps[$value]) ? self::$isJumps[$value] : '';
	}
	
	/**
	 * 通过module_id，获取所有类别值组成Select表单元素
	 * @param integer $mid
	 * @param boolean $hasTopLevel
	 * @return array
	 */
	public function getCategoriesOptions($mid = 0, $hasTopLevel = true)
	{
		$data = array();

		$ret = $this->getService()->findAllByMid(array('module_id' => $mid));
		if ($ret['err_no'] !== ErrorNo::SUCCESS_NUM) {
			return $data;
		}

		if ($hasTopLevel) {
			$data[] = array(
				'value' => 0,
				'label' => '顶级类别',
			);
		}

		foreach ($ret['data'] as $category) {
			$data[] = array(
				'value' => $category['category_id'],
				'label' => $category['category_name'],
			);
		}

		return $data;
	}

	/**
	 * 通过类别ID获取类别名
	 * @param integer $value
	 * @return string
	 */
	public function getNameById($value)
	{
		$ret = $this->getService()->getByPk('category_name', $value);
		if ($ret['err_no'] !== ErrorNo::SUCCESS_NUM) {
			return '';
		}

		return $ret['category_name'];
	}
}
